﻿using System;
using Nop.Core;

namespace Nop.Plugin.Misc.Reservations.Models 
{
    public enum ReservationStatusType
    {
        Available = 1,
        Reserved = 2,
        OnHold = 3,
    }

    public class Reservation : BaseEntity 
    {
        /// <summary>
        /// Date and time of reservation
        /// </summary>
        public virtual DateTime ReserveDate { get; set; }

        /// <summary>
        /// Site location unique identifier
        /// </summary>
        public virtual int Duration { get; set; }

        /// <summary>
        /// Custoner ID of person making reservation
        /// </summary>
        public virtual int CustomerID { get; set; }

        /// <summary>
        /// Product being reserved
        /// </summary>
        public virtual int ProductID { get; set; }

        /// <summary>
        /// Unique identifier for table reservation
        /// </summary>
        public virtual int TableIndex { get; set; }

        /// <summary>
        /// Number of persons in party
        /// </summary>
        public virtual int NumberPersons { get; set; }

        /// <summary>
        /// Type of reminder notification (email, SMS, etc.)
        /// </summary>
        public virtual int NotificationType { get; set; }

        /// <summary>
        /// Reminder notification time in advance (24 hrs, 15 min., etc.)
        /// </summary>
        public virtual DateTime NotificationTime { get; set; }

        /// <summary>
        /// Email to send reminder to (might be different from customer email)
        /// </summary>
        public virtual string NotificationEmailAddress { get; set; }

        /// <summary>
        /// SMS address for text reminders
        /// </summary>
        public virtual string NotificationSMSAddress { get; set; }

        /// <summary>
        /// Index of SMS carrier list
        /// </summary>
        public virtual int SMSCarrier { get; set; }

        /// <summary>
        /// Current status of reservation (booked, confirmed, cancelled, etc.)
        /// </summary>
        public virtual int Status { get; set; }

        /// <summary>
        /// Order Guid of confirmed reservation
        /// </summary>
        public virtual Guid OrderGuid { get; set; }

        /// <summary>
        /// Gets or sets the store identifier
        /// </summary>
        public int StoreID { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether the entity has been deleted
        /// </summary>
        public bool Deleted { get; set; }

        /// <summary>
        /// Additional text for reservation (special instructions, etc.)
        /// </summary>
        public virtual string Comments { get; set; }
    }
}
